<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>函数扩展和原型扩展功能</title>
</head>
<body>
  <script>
    // 1. 使用一个临时的函数名存储函数
    // 2. 重新定义原来的函数
    // 3. 定义扩展的功能
    // 4. 调用临时的那个函数
    function fun() {
      console.log('原始的功能')
    }
    // 1
    let tempFun = fun
    // 2
    fun = function () {
      // 4
      tempFun()
      // 3
      console.log('扩展的功能')
    }
    fun()
    /**
     * *原型式继承: 修改原型链的结构
    */
    // 数组响应式
    const ARRAY_METHOD = [
      'push',
      'pop',
      'shift',
      'unshift',
      'reverse',
      'sort',
      'splice',
    ]
    const arr = []
    const array_method = Object.create(Array.prototype)
    ARRAY_METHOD.forEach(method => {
      array_method[method] = function () {
        // 将数据进行响应式化
        const res = Array.prototype[method].apply(this, arguments)
        return res
      }
    })
    arr.__proto__ = array_method
  </script>
</body>
</html>